package com.zhuhao.design_mode.behavioral_pattern.observer_pattern;

/**
 * 观察者模式(observer pattern): 在对象之间定义一对多的依赖, 这样一来, 当一个对象改变状态, 依赖它的对象都会收到通知, 并自动更新
 * 意图：
 * 定义对象之间的一对多依赖，当一个对象状态改变时，它的所有依赖都会收到通知并且自动更新状态。
 * 主题(Subject)是被观察的对象，而其所有依赖者(Observer)称为观察者。
 * 类图：
 * 主题(Subject)具有注册和移除观察者、并通知所有观察者的功能，主题是通过维护一张观察者列表来实现这些操作的。
 * 观察者(Observer)的注册功能需要调用主题的 registerObserver() 方法。
 * 实现：
 * 天气数据布告板会在天气信息发生改变时更新其内容，布告板有多个，并且在将来会继续增加。
 * <p>
 * 参考地址：https://pdai.tech/md/dev-spec/pattern/19_observer.html
 *
 * @Author zhuhao
 * @Date 2022/5/29 20:37
 * @desc
 */
public interface Subject {

    /**
     * 将观察者注册到被观察者中
     *
     * @param observer
     */
    void registerObserver(Observer observer);

    /**
     * remove
     *
     * @param observer
     */
    void removeObserver(Observer observer);

    /**
     * notify：被观察者中有改变可以通过这个通知观察者，实际上是调用观察者实现的update方法
     */
    void notifyObserver();
}
